package ln.javatest.day12.demo01;
/*
哈希值：是一个十进制的整数，有系统随机给出（就是对象的地址值，是个逻辑地址，是模拟出来得到的地址，不是数据实际存储的物理地址）
在Object类有一个方法，可以获取对象的哈希值
int hashCode():返回该对象的哈希码值
hashCode方法的源码：
    public native int hashCode();
    native ：代表该方法调用的是本地操作系统的方法
*/

public class Demo01HashCode {
    public static void main(String[] args) {
        //Person类继承了Object类，所以可以使用Object类的hasCode方法
        Person p1 = new Person("熊丰",1);
        int h1 = p1.hashCode();
        System.out.println(h1);  //1

        Person p2 = new Person("熊丰",1);
        int h2 = p2.hashCode();
        System.out.println(h2);  //1
        //对象的地址值用的是hashCode，只不过是用十六进制表示

        //物理地址不相等
        System.out.println(p1==p2);//false

        /*
        String类的哈希值
            String类重写了Object类的hashCode方法
        */
        String s1 = new String("abc");
        String s2 = new String("abc");
        System.out.println(s1.hashCode()); //96354
        System.out.println(s2.hashCode()); //96354
    }
}
